[ACM] SSL証明書発行時のドメイン認証メールをSESで受け取ってみた
はじめに
AWSが提供するACM(AWS Certificate Manager)、 CloudFront、ELB(2016年4月17日より東京リージョンでも利用可能になりました)で利用できる、 HTTPS通信用のサーバ証明書を、追加費用なく利用できるサービスです。
ACMではサーバ証明書の作成時、対象ドメインの正当な保有者である事の確認のため、 メール認証が行われます。
通知先はwhoisに登録されたドメインの管理者と、
- admin@<ドメイン>
- administrator@<ドメイン>
- hostmaster@<ドメイン>
- postmaster@<ドメイン>
- webmaster@<ドメイン>
宛に確認URLを含むメールが送信されます。
今回、
- 上位ドメインに委任されたサブドメインのみ、Route53で管理されている。
- サブドメインにはメール着信環境が存在しない。
- 上位ドメイン管理者によるACMドメイン認証の代行操作が難しい。
といった、ドメイン認証のメール受け取りができない環境で、 ACMのSSL証明書を必要とする機会がありました。
AWSのサービス(SES、Route53、S3)を利用したメール受信環境を設定する事で、 簡単にドメイン認証を実施できました。
CloudFront、ELB、Route53の公開設定とあわせ、その内容を紹介させていただきます。
Route53
サブドメイン
- トップドメインは、末尾「.com」で終了するgTLD
- Route53のHostedZoneとして、サブドメインが存在する環境でした。
- MXレコードが存在する場合、メール受信環境が存在する可能性があります。既存環境の管理者とご相談ください。
SES準備
- ACMのドメイン認証メールを受け取るため、SESのメール受信設定を行います。
- サブドメインを管理しているRoute53と同一のAWS環境を利用しました。
- SESのリージョンは、日本から近いオレゴンを利用しました。
ドメイン認証
- SESのドメイン認証を実施します。
- メール受信を希望するサブドメインを指定し、「Verify This Domain」にすすみます。
認証内容確認
- ドメイン認証用のTXTレコードと、メール着信先を示すMXレコードの確認をします。
- サブドメインがRoute53のHostedZoneで管理されている場合、「Use Route53」に進み設定反映が可能です。
Route53追記内容の確認
- SESによるメール着信を可能とするため、「Email Receving Record」のチェックを入れます。
- Hosted Zoneは、SES、ACMの設定対象とするサブドメインを指定します。
Route53確認
- SESにより設定された、TXTレコード、MXレコードが正しく反映されたことを確認します。
ドメイン認証完了
- Route53にTXTレコードが反映された数分後、SESのドメイン認証のステータスが「verified」となります。
SESメール受信設定
受信ドメイン指定
- AWSコンソールSES画面より、「Email Receiving」→「Rule Sets」→「Create Rule」を開きます。
- 「Recipient」欄にサブドメインを記入します
- サブドメインのみを記入すると、サブドメイン宛に届いた全てのメール受け取りを行う指定となります。
着信設定
- メール着信先となるS3バケットを指定します。
- 2番目のActionは「Stop」、S3へのメール保存のみ行う設定としました。
詳細設定
- メール着信ルールと分かるルール名を指定します。
確認
- メール着信用に設定したルールのステータス、「Enabled」となることを確認します。
ACM設定
証明書リクエスト
- 今回、サブドメイン用に用意する証明書、ZoneApex、ホスト名を省略したサブドメインのみのURLに対応するため、マルチドメイン証明書を発行しました。
S3確認
- メール受信設定をしたS3バケットに、ACMのドメイン認証メールが到着します。
- S3に着信したメールの宛先は以下のとおりでした。
- admin@<サブドメイン>.<ドメイン>
- administrator@<サブドメイン>.<ドメイン>
- hostmaster@<サブドメイン>.<ドメイン>
- postmaster@<サブドメイン>.<ドメイン>
- webmaster@<サブドメイン>.<ドメイン>
認証URL抽出
- ACMのドメイン認証メールはテキストと、HTMLが混在したメールで届きます。
- S3に到達したファイルをダウンロードし、「https:」で開始する行のみを抽出する事で、認証用リンクが抽出可能でした。
cat * | grep "^https:" | sort -u https://nnnnnnn.amazon.com/approvals?code=nnnnnnn-dc31-47c4-852e-nnnnnnn&context=fa7df816-e175-4fb4-83f5-nnnnnnn-nnnnnnn https://nnnnnnn.amazon.com/approvals?code=nnnnnnn-8c01-4d19-af09nnnnnnnn&context=4bc25e2e-ae5e-4e43-b9b7-nnnnnnn-nnnnnnn
認証
- ブラウザで認証URLを開き、認証を実施します。
- マルチ証明書を発行した場合、全ての認証が完了するとステータスが「発行済み」となります。
公開設定
- サブドメインをZoneApex、ホスト名省略したURLで公開する設定例を紹介します。
CloudFront
- ACMの証明書、CloudFrontに設定する場合、CNAMEに公開ホスト名を記述します。
- 今回、ZoneApex、ホスト名省略したサブドメインのみの名前を指定しました。
- SSL証明書はACM発行のものを指定します。
ELB
- 2016年4月現在、バージニアリージョンのELBでは、SSL証明書としてACM作成の証明書が選択可能です。
Route53
- サブドメインのみの公開を行うため、Route53に登録するELB、CloudFrontのレコードは、Alias(Zone Apex)として設定します。
まとめ
上位ドメインが別部署で管理、サブドメインのみがAWSのRoute53で管理されている場合でも、 SESを利用することで、ACMのサーバ証明書発行手続きに必要なメールを受信することができました。
AWSではメールの受信環境、EC2上にSendmail、Postfixなどを利用して構築する事は可能ですが、 環境構築やインスタンス費用に加えて、正しくメール環境を維持するには相応のコストが発生します。
また、ACMのメールによるドメイン認証、whois情報として登録された 管理者(Registrant Email、Tech Email)宛にもメールが送付される仕様です。
ただ、ドメインの管理が別ベンダーにより実施されていたり、ドメイン取得に利用した レジストラによっては、プライバシー設定によるWhois情報の隠匿や、 whois情報のフォーマットがACM対応外でドメイン管理者宛メールが受け取れない場合があります。
メール環境の存在しないドメイン、サブドメイン環境で、ACMによる無料SSL証明書の発行手続きが必要な場合には、 まずSESのメール受信機能をお試しいただければと思います。